#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// 长时间执行的线程
void *task(void *arg)
{
    printf("task线程开始执行\n");

    // 模拟工作
    printf("task线程工作中...\n");
    sleep(3);

    printf("task线程sleep之后执行结束\n");

    return NULL;
}

int main()
{
    printf("主线程开始\n");
    pthread_t pt;
    // 创建线程
    pthread_create(&pt, NULL, task, NULL);

    // 等待一段时间 =》 让分线程先执行
    sleep(1);
    // 在适当的位置添加
    pthread_cancel(pt); // 取消线程pt
    // pthread_join 是 POSIX 线程库中的一个重要函数，用于等待一个线程的终止。
    // 它会阻塞调用线程，直到指定的线程终止为止。
    // 当一个线程被成功终止时，pthread_join 函数会返回该线程的退出状态，并将该线程的资源释放。
    // 如果不使用 pthread_join 函数，那么当线程终止时，它的资源将不会被释放，可能会导致资源泄漏。
    // 等待3秒
    // pthread_join(pt, NULL);
    // printf("主线程结束\n");
    // return 0;

    void *result;
    pthread_join(pt, &result);
    // 检查分线程是否被取消
    if (result == PTHREAD_CANCELED){
        printf("分线程被取消结束\n");
    }else{
        printf("分线程正常结束\n"); 
    }
    printf("主线程结束\n");
    return 0;
}

